/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ventas.beans;

import entities.C;
import entities.FacturaMultimarca;
import entities.LineaFacturaMultimarca;
import entities.Pedido;
import entities.Producto;
import entities.ProductoTalla;
import entities.Talla;
import facades.LineaFacturaMultimarcaFacade;
import facades.LineaPedidoFacade;
import facades.ProductoTallaFacade;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import qualifiers.EventoEntidadElegida;
import ventas.datamodel.TablaPedidoDataModel;

/**
 *
 * @author damfercer
 */
@Named(value = "estadoPedidoBean")
@SessionScoped
public class EstadoPedidoBean implements Serializable {
    private Pedido pedido;
    @Inject
    private TablaPedidoDataModel tablaPedidoDataModel;
    private Map<Integer,Integer> unidadesPedido;
    private Map<Integer,Integer> unidadesEnviadas;
    @Inject
    private ProductoTallaFacade productoTallaFacade;
    @Inject
    private LineaPedidoFacade lineaPedidoFacade;
    @Inject
    private LineaFacturaMultimarcaFacade lineaFacturaFacade;
    /**
     * Creates a new instance of EstadoPedidoBean
     */
    public EstadoPedidoBean() {
    }
    
    public void onPedidoElegido(@Observes @EventoEntidadElegida Pedido p){
        this.setPedido(p);
        this.tablaPedidoDataModel.setPedido(p);
        unidadesPedido=new HashMap<Integer,Integer>();
        unidadesEnviadas=new HashMap<Integer,Integer>();
    }
    
    public Integer recuperarCantidadPedidaDeProductoTalla(Producto p, Talla t){
        Integer cantidad=null;
        if(p!=null && t!=null){
            ProductoTalla pt=productoTallaFacade.getProductoTallaDeProductoYTalla(p, t);
            if(pt!=null){
               if(!unidadesPedido.containsKey(pt.getIdProductoTalla())){
                    cantidad=lineaPedidoFacade.getCantidadProductoTallaPedido(pt, getPedido());
                    unidadesPedido.put(pt.getIdProductoTalla(), cantidad);
                }
                else{
                    cantidad=unidadesPedido.get(pt.getIdProductoTalla());
                } 
            }
        }
        return cantidad;
    }
    
    public Integer recuperarCantidadServidaDeProductoTalla(Producto p, Talla t){
        Integer cantidad=null;
        ProductoTalla pt=productoTallaFacade.getProductoTallaDeProductoYTalla(p, t);
        if(!unidadesEnviadas.containsKey(pt.getIdProductoTalla())){
            cantidad=lineaFacturaFacade.getCantidadEnvidadaDeProductoTallaPedido(pt, getPedido());
            if(cantidad==null){
                cantidad=0;
            }
            unidadesEnviadas.put(pt.getIdProductoTalla(), cantidad);
        }
        else{
            cantidad=unidadesEnviadas.get(pt.getIdProductoTalla());
        }
        return cantidad;
    }
    
    public Integer recuperarCantidadServidaDeC(C c){
        Integer cantidad=0;
        for(FacturaMultimarca factura: pedido.getFacturaMultimarcaList()){
            for(LineaFacturaMultimarca lineaFactura: factura.getLineaFacturaMultimarcaList()){
                if(lineaFactura.getProductoTalla().getProducto().getC().equals(c)){
                    cantidad+=lineaFactura.getCantidad();
                }
            }
        }
        return cantidad;
    }

    /**
     * @return the pedido
     */
    public Pedido getPedido() {
        return pedido;
    }

    /**
     * @param pedido the pedido to set
     */
    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    /**
     * @return the tablaPedidoDataModel
     */
    public TablaPedidoDataModel getTablaPedidoDataModel() {
        return tablaPedidoDataModel;
    }

    /**
     * @param tablaPedidoDataModel the tablaPedidoDataModel to set
     */
    public void setTablaPedidoDataModel(TablaPedidoDataModel tablaPedidoDataModel) {
        this.tablaPedidoDataModel = tablaPedidoDataModel;
    }
}
